﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CurriculasController;
using CurriculasEntities;
using System.Data;


namespace GestionCurriculos
{   
    public partial class frmRegSilabo : System.Web.UI.Page
    {
        int codCurso = 0;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                int codSilabo = 0;
                lblTitulo.Text = "Registrar Silabo";
                Util.tbEval.Clear(); 
                Util.Inicializar();

                if (Request.QueryString["idSilabo"] != null)
                {
                    codSilabo = int.Parse(Request.QueryString["idSilabo"]);
                    lblTitulo.Text = "Modificar Silabo";
                    ////Cargar Datos Silabo
                    ObtenerSilabo(codSilabo);
                }
                ListarCursos();

                ////CARGAR COMBOS
                //ListarAreaConocimiento();
                ListarBibliografias();
                ListarEvaluaciones();
                ListarUnidades();

                ////CARGAR PREREQUISITOS
                //ListaPrerequisitos(codCurso);
                //CARGAR CURSOS HABILES
                ListaEvaluaciones(codSilabo);
                ListaBibliografia(codSilabo);
                if (Request.QueryString["idSilabo"] != null)
                {
                    cboCurso.SelectedValue = codCurso.ToString();

                }
                else
                {
                    List<PeriodoAcademicoBE> _lstPeriodoAcademico = new PeriodoAcademicoBL().ListarPeriodoAcademico().ToList();
                    if (_lstPeriodoAcademico.Count!=0){  
                        txtPeriodo.Text = _lstPeriodoAcademico[0].ano +"-"+ (int.Parse( _lstPeriodoAcademico[0].mes)+1);
                    }
                    else
                    {
                        txtPeriodo.Text = DateTime.Today.Year + "-0";
                    }
                }
            }
        }

        public string ObtenerPeriodo()
        {
            return "2014-3";
        }

        public void ObtenerSilabo(int codSilabo) {
            SilaboBL objSilaboBL = new SilaboBL();
            SilaboBE objSilaboBE = new SilaboBE();

            objSilaboBE.codSilabo = codSilabo;
            objSilaboBE = objSilaboBL.Obtener(codSilabo);

            txtHorSemana.Text = objSilaboBE.horSemana.ToString();
            txtIntroduccion.Text = objSilaboBE.introduccion;
            txtLogro.Text = objSilaboBE.logro;
            txtMetodologia.Text = objSilaboBE.metodologia;
            txtPeriodo.Text = objSilaboBE.perAcademico;//objSilaboBE.perAcademico.ToString();
            txtSemanas.Text = objSilaboBE.semanas.ToString();
            txtUnidad.Text = objSilaboBE.unidadaprendizaje;   

            //OBTENER CURSO
            ObtenerCursoSilabo(codSilabo);
        }

        public void ObtenerCursoSilabo(int codSilabo){
            CursoSilaboBL objcsBL = new CursoSilaboBL();
            CursoBE objCursoBE = new CursoBE();
            
            List<CursoSilaboBE> _lstObjcsBE = objcsBL.ListarBySilabo(codSilabo).ToList();
            
            foreach (CursoSilaboBE csBE in _lstObjcsBE) {
                objCursoBE.codCurso = csBE.codCurso;  
            }
            cboCurso.Enabled = false;
            ObtenerCurso(objCursoBE.codCurso);
            codCurso = objCursoBE.codCurso;
        }

        public void ListarBibliografias()
        {
            List<BibliografiaBE> _lstBilbio = new BibliografiaBL().ListarTodos().ToList();
            cboBibliografia.DataSource = _lstBilbio;
            cboBibliografia.DataTextField = "nombre";
            cboBibliografia.DataValueField = "codBibliografia";
            cboBibliografia.DataBind();
            cboBibliografia.Items.Insert(0, "Seleccionar");
        }

        public void ListarEvaluaciones()
        {
            List<EvaluacionBE> _lstEval= new EvaluacionBL().ListarTodos().ToList();
            cboEvaluacion.DataSource = _lstEval;
            cboEvaluacion.DataTextField = "tipo";
            cboEvaluacion.DataValueField = "codEvaluacion";
            cboEvaluacion.DataBind();
            cboEvaluacion.Items.Insert(0, "Seleccionar");
        }

        public void ListarUnidades()
        {
            List<UnidadAprendizajeBE> _lstUnidad = new UnidadAprendizajeBL().ListarTodos().ToList();
            cboUnidad.DataSource = _lstUnidad;
            cboUnidad.DataTextField = "nombre";
            cboUnidad.DataValueField = "codUnidadAprendizaje";
            cboUnidad.DataBind();
            cboUnidad.Items.Insert(0, "Seleccionar");
        }

        private void ListaBibliografia(int codSilabo)
        {

            //CARGAR PAISES
            List<BibliografiaBE> _lstBibliografias = new ListaBL().ListarBibliografias(codSilabo).ToList();

            foreach (BibliografiaBE lista in _lstBibliografias)
            {
                ListItem item = new ListItem();
                item.Value = lista.codBibliografia.ToString();
                item.Text = lista.nombre;
                lstBibliografias.Items.Add(item);
            }



        }

        private void ListaEvaluaciones(int codSilabo)
        {
            //CARGAR PAISES
            List<ListaEvaluacionBE> _lstEvaluaciones = new ListaBL().ListarEvaluaciones(codSilabo).ToList();

            foreach (ListaEvaluacionBE lista in _lstEvaluaciones)
            {
                DataRow tbRow;

                tbRow = Util.tbEval.NewRow();
                tbRow["codEvaluacion"] = lista.codEvaluacion;
                tbRow["tipo"] = lista.tipo;
                tbRow["peso"] = lista.peso;
                Util.tbEval.Rows.Add(tbRow);
            }
            gvEvaluaciones.DataSource = Util.tbEval;
            gvEvaluaciones.DataBind();
        }

        public void ListarCursos() {
            List<CursoBE> _lstCursos = new CursoBL().ListarCursosHabiles().ToList();
            cboCurso.DataSource = _lstCursos;
            cboCurso.DataTextField = "nomCurso";
            cboCurso.DataValueField = "codCurso";
            cboCurso.DataBind();
            cboCurso.Items.Insert(0, "Seleccionar");
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("frmSilabo.aspx");
        }

        protected void cboCurso_SelectedIndexChanged(object sender, EventArgs e)
        {
            //string strScript = "";
            if (cboCurso.SelectedIndex != 0)
            {
                int codCurso = int.Parse(cboCurso.SelectedValue);
                ObtenerCurso(codCurso);
            }
            else {

                lblCodigo.Text = "";
                lblNombre.Text = "";
                lblHoras.Text = "";
                lblCreditos.Text = "";
                lblAreaConocimiento.Text = "";
            }

            //Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", strScript, true);
        }

        public void ObtenerCurso(int codCurso) {
            CursoBE objCurso = new CursoBL().Obtener(codCurso);

            lblCodigo.Text = objCurso.codCurso.ToString();
            lblNombre.Text = objCurso.nomCurso;
            lblHoras.Text = objCurso.canHoras.ToString();
            lblCreditos.Text = objCurso.creditos.ToString();

            AreaConocimientoBE objArea = new AreaConocimientoBL().Obtener(objCurso.codAreaConocimiento);
            lblAreaConocimiento.Text = objArea.titulo;
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            string strScript = "";
            SilaboBE objSilabo = new SilaboBE();
            SilaboBL objSilaboBL = new SilaboBL ();

            EvaluacionBL objEvaluacionBL = new EvaluacionBL();
 
            SilaboBibliografiaBL objsil = new SilaboBibliografiaBL();
            SilaboBibliografiaBE objSilBE = new SilaboBibliografiaBE();

            EvaluacionSilaboBE objEvalBE = new EvaluacionSilaboBE();
            EvaluacionSilaboBL objEval = new EvaluacionSilaboBL();

            int peso = 0;
            foreach (GridViewRow row in gvEvaluaciones.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    try {
                        TextBox txtEval = (row.Cells[0].FindControl("txtPesoEval") as TextBox);
                        peso += int.Parse(txtEval.Text.Trim());
                    }
                    catch(Exception ex) {
                        strScript = "alert('El peso de las evaluaciones debe ser numerico')";
                    } 
                    
                }
            }

            if (peso != 100)
            {
                strScript = "alert('El peso de las evaluaciones debe ser 100')";
            }
            else {

            if (Request.QueryString["idSilabo"] != null)
            {
                try
                {
                    objSilabo.estado = "1";
                    objSilabo.horSemana = int.Parse(txtHorSemana.Text);
                    objSilabo.introduccion = txtIntroduccion.Text;
                    objSilabo.logro = txtLogro.Text;
                    objSilabo.metodologia = txtMetodologia.Text;
                    objSilabo.perAcademico = txtPeriodo.Text;//int.Parse(txtPeriodo.Text);
                    objSilabo.unidadaprendizaje = txtUnidad.Text;  
                    objSilabo.semanas = int.Parse(txtSemanas.Text);
                }
                catch (Exception ex)
                {
                    strScript = "alert('Ingrese los datos correctamente.')";
                }
                
                objSilabo.codSilabo = int.Parse(Request.QueryString["idSilabo"]);
                objSilabo = objSilaboBL.Modificar(objSilabo);

                //ELIMINAR BIBLIOGRAFIAS DQC
                List<BibliografiaBE> _lstBibliografias = new ListaBL().ListarBibliografias(objSilabo.codSilabo).ToList();
                if (_lstBibliografias.Count > 0)
                {
                    objSilaboBL.DeleteSilabos(objSilabo.codSilabo);
                }
                
                //GUARDAR BIBLIOGRAFIAS
                foreach (ListItem item2 in lstBibliografias.Items)
                {
                    objSilBE.codSilabo = objSilabo.codSilabo;
                    objSilBE.codBibliografia = int.Parse(item2.Value);
                    objsil.Crear(objSilBE);

                }

                //EVALUACIONES
                if (gvEvaluaciones.Rows.Count > 0)
                {
                    objEvaluacionBL.DeleteEvaluaciones(objSilabo.codSilabo);
                }

                foreach (GridViewRow row in gvEvaluaciones.Rows)
                {
                    if (row.RowType == DataControlRowType.DataRow)
                    {
                        
                        TextBox txtEval = (row.Cells[0].FindControl("txtPesoEval") as TextBox);

                        objEvalBE.codSilabo = objSilabo.codSilabo;
                        objEvalBE.codEvaluacion = int.Parse(row.Cells[1].Text);
                        objEvalBE.peso = int.Parse(txtEval.Text.Trim());

                        objEval.Crear(objEvalBE);  
                    }
                }


                //strScript = "alert('Se modifico el Silabo con código: " + objSilabo.codSilabo.ToString() + "')";
                 
                //Response.Redirect("frmSilabo.aspx");
                Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", "alert('Se modificó satisfactoriamente el sílabo con código " + objEvalBE.codSilabo + "');window.location.assign('frmSilabo.aspx');", true);

            }
            else
            {

                try
                {
                    if (cboCurso.SelectedIndex > 0)
                    {
                        objSilabo.estado = "1";
                        objSilabo.horSemana = int.Parse(txtHorSemana.Text);
                        objSilabo.introduccion = txtIntroduccion.Text;
                        objSilabo.logro = txtLogro.Text;
                        objSilabo.metodologia = txtMetodologia.Text;
                        objSilabo.perAcademico = txtPeriodo.Text; //int.Parse(txtPeriodo.Text);
                        objSilabo.semanas = int.Parse(txtSemanas.Text);
                        objSilabo.unidadaprendizaje = txtUnidad.Text;    
                        objSilabo.codSilabo = objSilaboBL.Crear(objSilabo);

                        CursoSilaboBL objcsbl = new CursoSilaboBL();
                        CursoSilaboBE objcsbe = new CursoSilaboBE();

                        objcsbe.codCurso = int.Parse(cboCurso.SelectedValue);
                        objcsbe.codSilabo = objSilabo.codSilabo;
                        objcsbe.estado = "1";

                        List<SilaboBE> _lstBuscaSilabo = new SilaboBL().BuscarSilaboPeriodo(objSilabo.codSilabo,objcsbe.codCurso,objSilabo.perAcademico).ToList();
                        if (_lstBuscaSilabo.Count != 0)
                        {
                            strScript = "alert('El silabo del período elegido " + objSilabo.perAcademico + " ya se encuentra registrado')";
                        }
                        else
                        {
                            objcsbl.Crear(objcsbe);



                            //GUARDAR BIBLIOGRAFIAS
                            foreach (ListItem item2 in lstBibliografias.Items)
                            {
                                objSilBE.codSilabo = objSilabo.codSilabo;
                                objSilBE.codBibliografia = int.Parse(item2.Value);
                                objsil.Crear(objSilBE);
                            }

                            foreach (GridViewRow row in gvEvaluaciones.Rows)
                            {
                                if (row.RowType == DataControlRowType.DataRow)
                                {
                                    TextBox txtEval = (row.Cells[0].FindControl("txtPesoEval") as TextBox);

                                    objEvalBE.codSilabo = objSilabo.codSilabo;
                                    objEvalBE.codEvaluacion = int.Parse(row.Cells[1].Text);
                                    objEvalBE.peso = int.Parse(txtEval.Text.Trim());

                                    objEval.Crear(objEvalBE);
                                }
                            }

                            //strScript = "alert('Se creo el Silabo con código: " + objSilabo.codSilabo.ToString() + "')";
                            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", "alert('Se registro satisfactoriamente el sílabo con código " + objEvalBE.codSilabo + "');window.location.assign('frmSilabo.aspx');", true);
                            //Response.Redirect("frmSilabo.aspx");
                        }
                        
                    }
                    else
                    {

                        strScript = "alert('Debe seleccionar un curso antes de crear el silabo.')";
                    }

                }
                catch (Exception ex)
                {
                    strScript = "alert('Ingrese los datos correctamente.')";
                }

            }
            }
            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", strScript, true);
        }

        protected void btnAgregarB_Click(object sender, EventArgs e)
        {
            string strScript = "";
            if (cboBibliografia.SelectedValue == "Seleccionar")
            {
                strScript = "alert('Seleccionar una Bilbiografía valida.')";
            }
            else
            {
                string nombre = cboBibliografia.SelectedItem.Text;
                string codBibliografia = cboBibliografia.SelectedValue;
                string val = "";
                foreach (ListItem item2 in lstBibliografias.Items)
                {
                    if (item2.Value == codBibliografia)
                    {
                        val = "1";
                    }
                }

                if (val == "1")
                {
                    strScript = "alert('La Bibliografía ya se encuentra agregada.')";
                }
                else
                {
                    ListItem item = new ListItem();
                    item.Value = codBibliografia;
                    item.Text = nombre;
                    lstBibliografias.Items.Add(item);
                }

            }

            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallFunction",strScript, true);
        }

        protected void btnEliminarB_Click(object sender, EventArgs e)
        {
            lstBibliografias.Items.Remove(lstBibliografias.SelectedItem);
        }

        protected void btnAgregarEval_Click(object sender, EventArgs e)
        {
            string strScript = "";
            if (cboEvaluacion.SelectedValue == "Seleccionar")
            {
                strScript = "alert('Seleccionar una Evaluación valida.')";
            }
            else
            {
                string tipo = cboEvaluacion.SelectedItem.Text;
                string codEvaluacion = cboEvaluacion.SelectedValue;
                string val = "";
                foreach (DataRow item2 in Util.tbEval.Rows )
                {
                    if (item2["codEvaluacion"].ToString () == codEvaluacion)
                    {
                        val = "1";
                    }
                }

                if (val == "1")
                {
                    strScript = "alert('La Bibliografía ya se encuentra agregada.')";
                }
                else
                {
                    TextBox txtItem = new TextBox();
                    ListItem item = new ListItem();
                    item.Value = codEvaluacion;
                    item.Text = tipo;
                    

                     
                    DataRow tbRow;



                    tbRow = Util.tbEval.NewRow();
                    tbRow["codEvaluacion"] = codEvaluacion;
                    tbRow["tipo"] = tipo;
                    tbRow["peso"] = "";
                    Util.tbEval.Rows.Add(tbRow);

                    gvEvaluaciones.DataSource = Util.tbEval;
                    gvEvaluaciones.DataBind();
  
                   // lstEvaluaciones.Items.Add(item);
                }

            }

            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallFunction", strScript, true);
        }

        protected void btnEliminarEval_Click(object sender, EventArgs e)
        {
            int index = 0;
            int contador = 0;
            foreach (GridViewRow row in gvEvaluaciones.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkRow = (row.Cells[0].FindControl("chkEval") as CheckBox);
                    if (chkRow.Checked)
                    {
                        index = row.RowIndex;
                        contador += 1;
                        
                    }
                }
            }
            if (contador == 1)
            {
                Util.tbEval.Rows[index].Delete();

                gvEvaluaciones.DataSource = Util.tbEval;
                gvEvaluaciones.DataBind();
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string strScript = "";
            if (cboUnidad.SelectedValue == "Seleccionar")
            {
                strScript = "alert('Seleccionar Unidad Aprendizaje valida.')";
            }
            else
            {
                string nombre = cboUnidad.SelectedItem.Text;
                string codUnidad = cboUnidad.SelectedValue;
                string val = "";
                foreach (ListItem item2 in lstUnidad.Items)
                {
                    if (item2.Value == codUnidad)
                    {
                        val = "1";
                    }
                }

                if (val == "1")
                {
                    strScript = "alert('La Unidad Aprendizaje ya se encuentra agregada.')";
                }
                else
                {
                    ListItem item = new ListItem();
                    item.Value = codUnidad;
                    item.Text = nombre;
                    lstUnidad.Items.Add(item);
                }

            }

            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallFunction", strScript, true);
        }

        protected void btnEliminarBUA_Click(object sender, EventArgs e)
        {

        }

        
    }
}